#include "bloques.h"
#include <time.h>


typedef struct
{

	int primerbloque_MB;			// primer bloque del mapa de bits
	int ultimobloque_MB;			// ultimo bloque del mapa de bits
	int primerbloque_AI;			// primer bloque array de inodos
	int ultimobloque_AI;			// ultimo bloque array de inodos
	int primerbloque_datos;			// primer bloque datos
	int ultimobloque_datos;			// ultimo bloque datos
	int inodoraiz;					// inodo del directorio raiz
	int primerinodo_libre;			// primer inodo libre
	int bloques_libres;				// numero de bloques libres
	int inodos_libres;				// numero de inodos libres
	int total_bloques;				// cantidad total de bloques
	int total_inodo;				// cantidad total de inodos

}superbloque;


typedef struct
{

	int tipo;						// tipo (0 -> libre / 1-> directorios / 2-> fichero)
	int tamano;						// tamaño en bytes logicos
	time_t fechaMod;				// fecha de modificación
	int bloques_asignados;			// cantidad de bloques fisicos asignados
	int enlaces_directorio;			// cantidad de enlaces de entradas en directorios
	int punteros_directos[8];		// punteros a bloques directos   -->> 8 variables x 4 bytes cada variable = 32 bytes y el inodo ocupa 64 bytes, necesitamos 8 punteros para llegar al total del inodo
	int punteros_indirectos[3];		// punteros a indirectos    

}inodo;


int tamMB(unsigned int nbloques);
int tamAI(unsigned int nbloques);
void initSB(unsigned int nbloques);
void initMB(unsigned int nbloques);
void initAI(unsigned int nbloques);


void leerSB();

void escribir_bit(int nbloque, int num);
unsigned int leer_bit(unsigned int nbloque);
int reservar_bloque();
int liberar_bloque(unsigned int nbloque);
int escribir_inodo(inodo inod, int ninodo);
inodo leer_inodo(unsigned int ninodo);
int reservar_inodo(int tipo);
void liberar_inodo(int ninodo);
int traducir_bloque_inodo(int ninodo, int nbloque, char reservar);
